/* Fenil Chandarana Fab Academy 2022 Webpage link: https://fabacademy.org/2022/labs/vigyanashram/students/fenil-chandarana/ */ #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); #define trigPin 5 #define echoPin 18 int dropLed = 17; int streamLed = 16; int streamcount = 0; int soilmoisturereading = 0; int watervalue = 0; int dropcount = 0; int dropLedstate = 0; int streamLedstate = 0; int dropButton =34; int streamButton = 35; int dropButtonvar = 0; int streamButtonvar = 0; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(dropLed, OUTPUT); pinMode(streamLed, OUTPUT); pinMode(dropButton, INPUT); pinMode(streamButton, INPUT); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(100); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; delay(100); int resetcycle =0; for (resetcycle=0; resetcycle<12; resetcycle++){ //after which cycle resets soilmoisturereading = digitalRead(14); dropButtonvar = digitalRead(dropButton); streamButtonvar = digitalRead(streamButton); if (soilmoisturereading==0 && distance>10) // value of photoresistor { if (resetcycle < 10) { // stream , constant power watervalue=watervalue+1; delay(80); if (watervalue > 15) // drop , fluctuating power { dropcount=dropcount+1; watervalue = 0; break; } } else { watervalue = 0;} } if (soilmoisturereading==0 && resetcycle == 10) // suppose the value of i is 60 in "if (soilmoisturereading == HIGH && i == 60)". Let say the stream breaks at 20 and resumed at 21 then +1 vill be incremented in stream when the number reaches at m=81. 21+60=81. { if(distance >10){ // photoresistor streamcount = streamcount+1; delay (100); } } if (soilmoisturereading==1 && resetcycle>2) { resetcycle = 0; delay(100); } Serial.print("watervalue = "); Serial.print(watervalue); Serial.print(" "); Serial.println(resetcycle); Serial.print(" "); Serial.println(soilmoisturereading); Serial.print(" "); Serial.println(distance); Serial.print(" "); Serial.println(streamcount); Serial.print(" "); Serial.println(dropcount); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0, 10); display.print("Stream:"); display.setCursor(100, 10); display.print(streamcount); display.setCursor(0, 40); display.print("Drop:"); display.setCursor(80, 40); display.print(dropcount); display.display(); if (dropcount == 1) // led for drop , fluctuating power { dropLedstate = 1; } if (dropLedstate == HIGH ){ digitalWrite (dropLed, HIGH); dropLedstate = 0; } if (streamcount == 1) // led for stream , constant power { streamLedstate = 1; } if (streamLedstate == HIGH ) { digitalWrite (streamLed, HIGH); streamLedstate = 0; } if (dropButtonvar == 1){ digitalWrite (dropLed, LOW); dropLedstate = 0; } if (streamButtonvar == 1){ digitalWrite (streamLed, LOW); streamLedstate = 0; } } }